import adminListView from "$v/adminList"


// 引入axios请求
import {
  addAdminRequest,
  adminListRequest,
  deleteAdminRequest,
  isLoginRequest
} from "$a/admin"

// 封装函数,添加完数据后不需要刷新,自动添加上数据,所以需要接着发送请求
const showAdminList = async (res) => {
  let adminListResult = null; //局部拿不到值,变成全局的值为null
  //只要进入当前路由函数，则立马开始查询所有的管理员信息
  try {
    adminListResult = await adminListRequest();
    console.log(adminListResult);
  } catch (e) {
    alert("获取管理员列表异常:" + e.message)
    // 判断是否是权限异常
    if (!e.isLogin) {
      // 不往下执行了记得写return
      return router.go("/login")
    }
  }
  // 渲染二级路由视图

  res.render(adminListView({
    adminList: adminListResult
  })); //如果在这里传url 点击切换的区域拿不到url的值
  // 在sem路由中,在路由的回调函数中可以获取整个document,所以我们可以在这个位置操作DOM
}


export default async (req, res) => {

  //路由切换的时候验证登录
  try {
    await isLoginRequest();
  } catch (e) {
    //请求异常后提示用户
    alert("有异常" + e.message)

    //判断是否是权限异常
    if (!e.isLogin) {
      return router.go("/login");
    }
  }

  // 展示管理员页面,传入res作为参数使用
  await showAdminList(res);


  // 添加管理员功能
  // 给保存按钮绑定点击事件,添加管理员
  const oSaveAdminBtn = document.getElementById('saveAdminBtn');

  document.onclick = async function (e) {
    // 添加管理员逻辑
    if (e.target.id === "saveAdminBtn") {
      // 可以通过表单元素的name属性获取元素
      // console.log(document.adminForm);
      // console.log(document.adminForm.adminName);
      // console.log(document.adminForm.password);
      // console.log(document.adminForm.rePassword);
      // 获取用户输入的内容
      const adminNameValue = document.adminForm.adminName.value.trim();
      const passwordValue = document.adminForm.password.value.trim();
      const rePasswordValue = document.adminForm.rePassword.value.trim();

      // 判断所有的输入不能为空
      if (!adminNameValue || !passwordValue || !rePasswordValue) {
        return alert("输入内容不能为空!!!!");
      }

      // 判断密码是否一致
      if (passwordValue !== rePasswordValue) {
        return alert("两次输入的密码不一致")
      }

      // 向后端发送添加管理请求
      try {
        await addAdminRequest({
          adminName: adminNameValue,
          password: passwordValue,
          regTime: new Date().toLocaleString()
        });
        document.getElementById("clossAdd").click();
        document.adminForm.reset();

        alert('添加成功')

        // 重新渲染页面
        showAdminList(res);

      } catch (e) {
        //请求异常后提示用户
        alert("有异常" + e.message);
        // 清空表单
        document.adminForm.reset();

        // 判断是否是权限异常
        if (!e.isLogin) {
          // 不往下执行了记得写return
          return router.go("/login")
        }
      }

    }


    // 删除管理员逻辑
    // 找节点名称,必须是大写的
    if (e.target.nodeName === "BUTTON" && e.target.parentNode.nodeName === "TD") {

      // 获取当前删除按钮对应的adminName (在生成删除按钮的时候 就把自定义属性设置上去)
      // 这是dom操作,H5新增自定义属性的方法,要有data-前缀, 在每一个DOM对象上都有一个dataset属性,是一个对象,通过操作这个对象上的属性(增删改查),可以操作dom身上的属性
      const adminName = e.target.dataset.adminname;

      // 发送删除请求
      try {
        await deleteAdminRequest(adminName);
        alert("删除管理员" + adminName + "成功")

        // 删除成功  重新渲染视图
        showAdminList(res);
      } catch (e) {
        alert("删除管理员" + adminName + "异常");

        // 判断是否是权限异常
        if (!e.isLogin) {
          // 不往下执行了记得写return
          return router.go("/login")
        }

      }
    }

  }



}